﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Com.DA;
using System.Windows;

namespace Com.BU
{
    public class LibraryManagerInCom
    {
        #region Khai bao List
        // Khai báo đối tượng data model EcoSystemEntities
        public static EcoSystemEntities eco = new EcoSystemEntities();
        //  Khai báo list các địa điểm lắp đặt
        public static System.Data.Objects.ObjectSet<tb_location> LocationList;
        //  Khai báo list các loại bao bì
        public static System.Data.Objects.ObjectSet<tb_wrapping> WrappingList;
        //  Khai báo list dữ liệu sản phầm
        public static System.Data.Objects.ObjectSet<tb_product> ProductList;
        //  Khai báo List dữ liệu các thông số entanpy
        public static System.Data.Objects.ObjectSet<tb_enthalpy> ProductEnthalpyList;
        //  Khai báo list dữ liệu của hướng kính và các thông số có liên quan
        public static System.Data.Objects.ObjectSet<tb_glass_direction> GlassDirectionList;
        public static System.Data.Objects.ObjectSet<tb_immediate_impact> ImmediateImpactList;
        public static System.Data.Objects.ObjectSet<tb_solar_radiation_through_glass> SolarRadiationList;
        //  Khai báo list dữ liệu của kính tường
        public static System.Data.Objects.ObjectSet<tb_wall_glass_heat_coefficient> WallGlassCoefficientList;
        //  Khai báo list các loại kính và cacs hệ số bức xạ
        public static System.Data.Objects.ObjectSet<tb_radiation_characteristics> GlassCoeffientList;
        //  Khai báo list hệ số truyền nhiệt của trần mái 
        public static System.Data.Objects.ObjectSet<tb_roof_ceiling_heat_coefficient> RoofCeilingHeatList;
        //  Khai báo list các đặc tính của trần mái
        public static System.Data.Objects.ObjectSet<tb_roof_ceiling_characteristic> RoofCeilingCharacteristicList;
        //  Khai báo list các loại cấu trúc của trần mái
        public static System.Data.Objects.ObjectSet<tb_roof_ceiling_structure> RoofCeilingStructureList;
        //  Khai báo list hệ số hấp thụ bức xạ mặt trời của bề mặt amis
        public static System.Data.Objects.ObjectSet<tb_roof_surface> RoofSurfaceList;
        //  Khai báo list các loại trần
        public static System.Data.Objects.ObjectSet<tb_ceiling> CeilingList;
        //  Khai báo list các đặc điểm mặt trên của trần
        public static System.Data.Objects.ObjectSet<tb_ceiling_layer> CeilingLayerList;
        // Khai báo list các thông số truyền nhiệt của trần
        public static System.Data.Objects.ObjectSet<tb_heat_transfer_ceiling> CeilingCoefficientList;
        // Khai báo list các thông số truyền nhiệt của kính cửa sổ và giếng trời
        public static System.Data.Objects.ObjectSet<tb_window_skywell> WindowSkywellCoefficientList;
        // Khai báo list các thông số truyền nhiệt của cửa gỗ và kính tường
        public static System.Data.Objects.ObjectSet<tb_wood_door_heat_coefficient> WoodGlassCoefficientList;
        // Khai báo list các vật liệu làm tường và thông số nhiệt trở của chúng
        public static System.Data.Objects.ObjectSet<tb_heat_resistance> WallMaterialList;
        //  Khai báo list các không gian điều hòa
        public static System.Data.Objects.ObjectSet<tb_air_conditioning_place> AirConditionPlaceList;
        //  Khai báo list các chế độ làm việc của người
        public static System.Data.Objects.ObjectSet<tb_working_level> WorkingLevelList;
        // Khai báo list các dữ liệu nhiệt tỏa ra do cơ thể người
        public static System.Data.Objects.ObjectSet<tb_heat_by_man> HeatByManList;
        // Khai báo list hệ số không khí thóat
        public static System.Data.Objects.ObjectSet<tb_exiting_air> ExitAirList;
        //  Khai báo list các loại buồng lạnh
        public static System.Data.Objects.ObjectSet<tb_storage_room_type> RoomTypeList;
        //  Khai báo các loại tường của buồng lạnh và hiệu nhiệt độ dư
        public static System.Data.Objects.ObjectSet<tb_temperature_excess> ColdStorageWallList;
        //  Khai báo các dữ liệu chất tải tiêu chuẩn của buồng lạnh đối với từng loái sản phẩm
        public static System.Data.Objects.ObjectSet<tb_loading_standard> LoadingStandardList;
        //
        public static System.Data.Objects.ObjectSet<tb_wall_material> CSWallMaterialList;
        //
        public static System.Data.Objects.ObjectSet<tb_ceiling_type> CeilingTypeList;

        /// <Them_Trong>
        public static System.Data.Objects.ObjectSet<tb_wall_type> wallTypeList;
        public static System.Data.Objects.ObjectSet<tb_wall_direction> wallDirectionList;
        public static System.Data.Objects.ObjectSet<tb_ceiling_type> RoofList;
        public static System.Data.Objects.ObjectSet<tb_respiratory_heat> RespirationList;

        public static System.Data.Objects.ObjectSet<tb_temperature_excess> TemperatureExcessList;

        public static System.Data.Objects.ObjectSet<tb_equipment> EquipmentList;

        public static void loadroofType()
        {
            RoofList = eco.tb_ceiling_type;

        }

        public static void loadWallType()
        {
            wallTypeList = eco.tb_wall_type;

        }
        public static void loadDirection()
        {
            wallDirectionList = eco.tb_wall_direction;

        }

        public static void loadRespirationList()
        {
            RespirationList = eco.tb_respiratory_heat;

        }

        /// </summary>

        #endregion

        #region Cold Storage

        public static void loadColdStorageWallList()
        {
            ColdStorageWallList = eco.tb_temperature_excess;
        }

        public static void loadCSWallMaterialList()
        {
            CSWallMaterialList = eco.tb_wall_material;
        }

        public static void loadCeilingTypeList()
        {
            CeilingTypeList = eco.tb_ceiling_type;
        }

        public static void loadTemperatureExcessList()
        {
            TemperatureExcessList = eco.tb_temperature_excess;
        }

        public static void addTemperatureExcessList(tb_temperature_excess te)
        {

            if (te.description.Equals(""))
            {
                string walltype = LibraryManagerInCom.CSWallMaterialList.SingleOrDefault(w => w.id == te.wall_material_id).wall_type;
                string dir = LibraryManagerInCom.wallDirectionList.SingleOrDefault(d => d.id == te.direction_id).direction;
                te.description = walltype + ", " + dir;
            }
            eco.tb_temperature_excess.AddObject(te);
            eco.SaveChanges();
            MessageBox.Show("Add a temperature excess item successfully!");


        }
        public static void delTemperatureExcess(tb_temperature_excess te)
        {
            eco.DeleteObject(te);
            eco.SaveChanges();
            MessageBox.Show("Delete a temperature excess item successfully");
        }
        public static void addCSWallMaterial(tb_wall_material wm)
        {
            eco.tb_wall_material.AddObject(wm);
            eco.SaveChanges();
        }

        //  Sao chep doi tuong tb_temperautre_excess duoc nhap vao va tra ra doi tuong moi
        public static tb_temperature_excess CopyTemperatureExcess(tb_temperature_excess t1)
        {
            tb_temperature_excess t2 = new tb_temperature_excess();
            t2.wall_material_id = t1.wall_material_id;
            t2.direction_id = t1.direction_id;
            t2.termperature_excess = t1.termperature_excess;
            t2.description = " Temperature Excess -- " + (eco.tb_temperature_excess.Count() + 1);
            return t2;
        }
        #endregion

        #region Location functions




        //  Thu làm

        //  Load loại kính
        public static void loadTypeOfGlass()
        {
            //eco = new EcoSystemEntities();
            GlassCoeffientList = eco.tb_radiation_characteristics;
        }
        //  Load hướng của tường
        public static void loadDirectionOfGlass()
        {
            //eco = new EcoSystemEntities();
            GlassDirectionList = eco.tb_glass_direction;

        }
        //  Load số Pressure kg/m2 sàn
        public static void loadPressure()
        {
            ImmediateImpactList = eco.tb_immediate_impact;
        }
        // Load thời gian
        public static void loadTime()
        {
            ImmediateImpactList = eco.tb_immediate_impact;
        }
        // Load lượng bức xạ mặt trời lớn nhất qua kính
        public static void loadSolarByRadiation()
        {
            SolarRadiationList = eco.tb_solar_radiation_through_glass;
        }
        //  Load cấu tạo của trần
        public static void loadCeilling()
        {
            CeilingList = eco.tb_ceiling;
        }
        //  Load đặc điểm của trần
        public static void loadCeillingLayer()
        {
            CeilingLayerList = eco.tb_ceiling_layer;
        }
        //  Load cấu tạo của mái
        public static void loadStructureRoof()
        {
            RoofCeilingStructureList = eco.tb_roof_ceiling_structure;
        }
        //  Load đặc điểm của mái
        public static void loadCharacteristicRoof()
        {
            RoofCeilingCharacteristicList = eco.tb_roof_ceiling_characteristic;
        }
        //  Load loại mặt mái
        public static void loadRoofSurface()
        {
            RoofSurfaceList = eco.tb_roof_surface;
        }
        public static void addRoofSurface(tb_roof_surface rs)
        {
            eco.tb_roof_surface.AddObject(rs);
            eco.SaveChanges();
            MessageBox.Show("Add a roof surface item successfully!");
        }
        public static void delRoofSurface(tb_roof_surface rs)
        {
            eco.tb_roof_surface.DeleteObject(rs);
            eco.SaveChanges();
            MessageBox.Show("Delete a roof surface item successfully!");
        }
        public static tb_roof_surface copyRoofSurface(tb_roof_surface rs)
        {
            tb_roof_surface rs2 = new tb_roof_surface();
            rs2.absorption_coefficient = rs.absorption_coefficient;
            rs2.surface_roof = "Roof Surface -- " + (eco.tb_roof_surface.Count() + 1);

            return rs2;
        }
        //  Kết thúc phần Thu làm

        //  Load vị trí   
        public static void loadLocation()
        {
            //eco = new EcoSystemEntities();
            LocationList = eco.tb_location;
        }

        // Thêm đối tượng location vào database
        public static void addLocation(tb_location lc)
        {
            eco.tb_location.AddObject(lc);
            eco.SaveChanges();
            //LocationList = eco.tb_location;
            MessageBox.Show("Add new a location successfully!");
        }

        // Xóa đối tượng location được chọn trong database
        // Nếu ko còn đối tượng nào để xóa, sẽ hiện thông báo cho người dùng
        public static void delLocation(tb_location loc)
        {
            if (eco.tb_location == null)
            {
                MessageBox.Show("No location is available");
            }
            else
            {
                eco.tb_location.DeleteObject(loc);
                eco.SaveChanges();
                MessageBox.Show("Delete a location successfully");
            }

        }

        //  Khởi tạo 1 đối tượng location mới
        //  và copy các thuộc tính của đối tượng được chọn vào đối tượng mới   
        public static tb_location copyLocation(tb_location lc)
        {
            tb_location lc2 = new tb_location();
            lc2.location = "Location -- " + (eco.tb_location.Count() + 1);
            lc2.max_humidity = lc.max_humidity;
            lc2.max_temperature = lc.max_temperature;
            lc2.average_humidity = lc.average_humidity;
            lc2.average_temperature = lc.average_temperature;
            return lc2;
        }
        #endregion

        #region Wrapping functions
        // <Wrapping tab function>   
        // Cung cấp WrappingList mới nhất cho người dùng hiển thị trên màn hình     
        public static void loadWrapping()
        {
            //eco = new EcoSystemEntities();
            WrappingList = eco.tb_wrapping;
        }

        // Thêm đối tượng wrapping vào database
        public static void addWrapping(tb_wrapping wp)
        {

            eco.tb_wrapping.AddObject(wp);
            eco.SaveChanges();
            MessageBox.Show("Add new a wrapping item successfully!");
        }

        // Xóa đối tượng wrapping được chọn trong database
        // Nếu ko còn đối tượng nào để xóa, sẽ hiện thông báo cho người dùng
        public static void delWrapping(tb_wrapping wp)
        {
            if (eco.tb_wrapping == null)
            {
                MessageBox.Show("No wrapping item is available");
            }
            else
            {
                eco.tb_wrapping.DeleteObject(wp);
                eco.SaveChanges();
                MessageBox.Show("Delete a wrapping item successfully");
            }

        }

        //  Khởi tạo một đối tượng wrapping mới
        //  và copy tất cả thuộc tính của đối tượng wrapping được chọn cho đối tượng vừa tạo
        public static tb_wrapping copyColdStorageWrapping(tb_wrapping wp)
        {
            tb_wrapping wp2 = new tb_wrapping();
            wp2.wrapping_name = "Wrapping -- " + (eco.tb_wrapping.Count() + 1);
            wp2.weight_rate = wp.weight_rate;
            wp2.specific_heat = wp.specific_heat;
            return wp2;
        }
        #endregion

        #region Product functions

        //  Gán dữ liệu product trong database cho ProductList
        public static void loadProduct()
        {
            ProductList = eco.tb_product;
        }
        // Gán dữ liệu enthalpy trong database cho ProductEnthalpyList
        public static void loadEnthapyList()
        {
            ProductEnthalpyList = eco.tb_enthalpy;
        }
        // Gán dữ liệu loaddingStandard trong database cho LoadingStandardList
        public static void loadLoadingStandardList()
        {
            LoadingStandardList = eco.tb_loading_standard;
        }


        // Thêm đối tượng Product mới vào cơ sở dữ liệu
        public void addProduct(tb_product pr)
        {
            eco.tb_product.AddObject(pr);
            eco.SaveChanges();
            MessageBox.Show("Add new a product item successfully!");
        }

        //  Xóa đối tượng Product trong cơ sở dữ liệu
        public void delProduct(tb_product pr)
        {
            if (eco.tb_product == null)
            {
                MessageBox.Show("No product item is available");
            }
            else
            {
                eco.tb_product.DeleteObject(pr);
                eco.SaveChanges();
                MessageBox.Show("Delete a product item successfully");
            }
        }

        //  Khởi tạo một đối tượng Product mới
        // Sao chép các thuộc tính của đối tượng Product được chọn cho đối tượng Product mới tạo
        public tb_product copyProduct(tb_product pr)
        {
            tb_product pr2 = new tb_product();
            pr2.product_name = "Product -- " + (eco.tb_product.Count() + 1);
            pr2.product_type = pr.product_type;
            eco.tb_product.AddObject(pr2);

            if (pr.product_type == 1)
            {
                tb_respiratory_heat rh = eco.tb_respiratory_heat.SingleOrDefault(r => r.product_id == pr.id);
                tb_respiratory_heat rh2 = new tb_respiratory_heat();
                rh2 = rh;
                rh2.product_id = pr2.id;
                eco.tb_respiratory_heat.AddObject(rh2);
            }

            tb_enthalpy en = eco.tb_enthalpy.SingleOrDefault(e => e.product_id == pr.id);
            tb_enthalpy en2 = new tb_enthalpy();
            en2 = en;
            en2.product_id = pr2.id;
            eco.tb_enthalpy.AddObject(en2);

            return pr2;
        }
        #endregion

        #region Glass functions


        // Gán dữ liệu hướng của tường trong database cho GlassDirectionList
        public static void loadGlassDirection()
        {
            GlassDirectionList = eco.tb_glass_direction;
        }
        //  Gán dữ liệu các hệ số tác động tức thời trong database cho ImmediateImpactList
        public static void loadImmediateImpact()
        {
            ImmediateImpactList = eco.tb_immediate_impact;
        }
        //  Gán dữ liệu các hệ số bức xạ mặt trời trong cơ sở dữ liệu ccho SolarRadiationList
        public static void loadSolarRadiation()
        {
            SolarRadiationList = eco.tb_solar_radiation_through_glass;
        }
        // Gán dữ liệu
        public static void loadWallGlassCoefficientList()
        {
            WallGlassCoefficientList = eco.tb_wall_glass_heat_coefficient;
        }
        // Gán dữ liệu các loại kính và hệ số bức xạ cho GlassCoefficientList
        public static void loadGlassList()
        {
            GlassCoeffientList = eco.tb_radiation_characteristics;
        }

        #endregion

        #region Ceiling


        // Gán dữ liệu hệ số truyền nhiệt của trần mái cho RoofCeilingHeatList
        public static void loadRoofCeilingCoefficient()
        {
            RoofCeilingHeatList = eco.tb_roof_ceiling_heat_coefficient;
        }
        // Gán dữ liệu đặc tính của trần mái cho RoofCeilingCharacteristicList
        public static void loadRoofCeilingCharacteristic()
        {
            RoofCeilingCharacteristicList = eco.tb_roof_ceiling_characteristic;
        }
        // Gán dữ liệu đặc điểm cấu tạo của trần mái cho RoofCeilingStructureList
        public static void loadRoofCeilingStructure()
        {
            RoofCeilingStructureList = eco.tb_roof_ceiling_structure;
        }
        // Gán dữ liệu hệ số hấp thu bức xạ mặt trời của bề mặt mái cho RoofSurfaceList
        public static void loadSurfaceCoefficient()
        {
            RoofSurfaceList = eco.tb_roof_surface;
        }
        // Gán dữ liệu các loại mái cho Ceilinglist
        public static void loadCeiling()
        {
            CeilingList = eco.tb_ceiling;
        }
        //  Gán dữ liệu đặc tính các lớp mái cho Ceilinglayerlist
        public static void loadCeilingLayer()
        {
            CeilingLayerList = eco.tb_ceiling_layer;
        }
        //  Gán dữ liệu hệ số truyền nhiệt của mái
        public static void loadCeilingCoefficient()
        {
            CeilingCoefficientList = eco.tb_heat_transfer_ceiling;
        }

        #endregion

        //  Gán dữ liệu các hệ số truyền nhiệt giữa kính cửa sổ và giếng trời cho Window Skywell CoefficientList
        public static void loadWindowSkywellCoefficient()
        {
            WindowSkywellCoefficientList = eco.tb_window_skywell;
        }
        // Gán dữ liệu các hệ số truyền nhiệt của cửa kính và cửa foox cho WoodGlassCoefficientList
        public static void loadWoodGlassCoefficient()
        {
            WoodGlassCoefficientList = eco.tb_wood_door_heat_coefficient;
        }
        // Gán dữ liệu các chất liệu tường cho WallMaterialList
        public static void loadWallMaterial()
        {
            WallMaterialList = eco.tb_heat_resistance;
        }
        public static void addWallMaterial(tb_heat_resistance hr)
        {
            eco.tb_heat_resistance.AddObject(hr);
            eco.SaveChanges();
            MessageBox.Show("Add a heat resistance item successfully!");
        }
        public static void delWallMaterial(tb_heat_resistance hr)
        {
            eco.tb_heat_resistance.DeleteObject(hr);
            eco.SaveChanges();
            MessageBox.Show("Delete a heat resistance item successfully");
        }
        public static tb_heat_resistance copyWallMaterial(tb_heat_resistance hr)
        {
            tb_heat_resistance hr2 = new tb_heat_resistance();
            hr2.material_name = hr.material_name;
            hr2.density = hr.density;
            hr2.thickness = hr.thickness;
            hr2.heat_resistance = hr.heat_resistance;
            hr2.description = "Heat Resistance -- " + (eco.tb_heat_resistance.Count() + 1);

            return hr2;
        }
        #region AirCondition Place

        //  Gán dữ liệu các không gian điều hòa cho AirConditionPlacelist
        public static void loadAirConditionPlace()
        {
            AirConditionPlaceList = eco.tb_air_conditioning_place;
        }
        //  Gán các dữ liệu các chế độ làm việc cho Workinglevellist
        public static void loadWorkingLevel()
        {
            WorkingLevelList = eco.tb_working_level;
        }
        //  Gán các dữ liệu nhiệt tỏa ra do người cho HeatByManList
        public static void loadHeatByMan()
        {
            HeatByManList = eco.tb_heat_by_man;
        }
        //  Gán các dữ liệu không khí lọt cho ExitAirList
        public static void loadExitingAir()
        {
            ExitAirList = eco.tb_exiting_air;
        }
        public static void addExitingAir(tb_exiting_air ex)
        {
            eco.tb_exiting_air.AddObject(ex);
            eco.SaveChanges();
            MessageBox.Show("Add a new exiting air item successfully!");
        }
        public static void delExitingAir(tb_exiting_air ex)
        {
            eco.tb_exiting_air.DeleteObject(ex);
            eco.SaveChanges();
            MessageBox.Show("Delete a new exiting air item successfully!");

        }
        public static tb_exiting_air copyExitingAir(tb_exiting_air ex1)
        {
            tb_exiting_air ex2 = new tb_exiting_air();
            ex2.room_volume = ex1.room_volume;
            ex2.coefficient = ex1.coefficient;
            ex2.description = "Exiting Air -- " + (eco.tb_exiting_air.Count() + 1);
            return ex2;

        }
        #endregion

        public static void loadRoomType()
        {
            RoomTypeList = eco.tb_storage_room_type;

        }

        public static void loadEquipment()
        {
            EquipmentList = eco.tb_equipment; ;
        }

        public static void loadLatitute()
        {
            SolarRadiationList = eco.tb_solar_radiation_through_glass;
        }
        //  Load giờ mặt trời
        public static void loadSolarHour()
        {
            SolarRadiationList = eco.tb_solar_radiation_through_glass;
        }
        //  Load tháng
        public static void loadMonth()
        {
            SolarRadiationList = eco.tb_solar_radiation_through_glass;
        }
        //  Kết thúc phần Thu làm

    }
}

